﻿using System;
// 闹钟类
class Clock
{
    // 定义 Tick 事件和 Alarm 事件
    public event Action<DateTime> Tick;
    public event Action<DateTime> Alarm;

    private DateTime _alarmTime;
    private bool _running;

    // 设置闹钟时间
    public void SetAlarm(DateTime alarmTime)
    {
        _alarmTime = alarmTime;
    }

    // 开始运行闹钟
    public void Start()
    {
        _running = true;
        while (_running)
        {
            // 触发 Tick 事件
            Tick?.Invoke(DateTime.Now);

            // 判断是否到达闹钟时间
            if (DateTime.Now >= _alarmTime)
            {
                // 触发 Alarm 事件
                Alarm?.Invoke(DateTime.Now);
                _running = false;
            }

            // 时间流逝一秒钟
            System.Threading.Thread.Sleep(1000);
        }
    }
}
namespace AlarmClock
{
    class Program
    {
        static void Main(string[] args)
        {
            var clock = new Clock();

            // 事件Tick和Alarm订阅
            clock.Tick += Clock_Tick;
            clock.Alarm += Clock_Alarm;

            // 设置闹钟时间
            clock.SetAlarm(new DateTime(2023, 3, 24, 9, 23, 10));

            // 开始运行闹钟
            clock.Start();

            Console.WriteLine("按下任意键停止闹钟...");
            Console.ReadKey();
        }

        // 处理 Tick 事件
        private static void Clock_Tick(DateTime currentTime)
        {
            Console.WriteLine($"Tick: {currentTime}");
        }

        // 处理 Alarm 事件
        private static void Clock_Alarm(DateTime alarmTime)
        {
            Console.WriteLine($"Alarm: {alarmTime}");
        }
    }
}
